//
//  MainViewController.swift
//  swiftTest
//
//  Created by LiTing on 17/6/7.
//  Copyright © 2017年 LiTing. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {
    
    private lazy var composeBtn : UIButton = UIButton(imageName: "tabbar_compose_icon_add", bgImageName: "tabbar_compose_button")

    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupComposeBtn()
    }

    
  
    
}
//MARK: - 设置UI界面
extension MainViewController {
    ///设置发布按钮
    private func setupComposeBtn(){
        //1.将composeBtn添加到tabbar中
        tabBar.addSubview(composeBtn)
        
        //2.设置位置
        composeBtn.center = CGPointMake(tabBar.center.x, tabBar.bounds.size.height * 0.5)
        
        //3.监听发布按钮的点击
        //Selector两种写法： 1>Selector("composeBtnClick") 2> "composeBtnClick"
        composeBtn.addTarget(self, action: #selector(MainViewController.composeBtnClick), forControlEvents: .TouchUpInside)
    }
    
      
}

//MARK: - 事件监听
extension MainViewController {
    //事件监听本质发送消息，但是发送消息是OC的特性
    //swift：将方法包装成@SEL --> 类中查找方法列表 --> 根据@SEL找到imp指针（函数指针）--> 执行函数
    //如果swift中将一个函数声明成private，那么该函数不会被添加到方法列表中
    //如果在private前面加上@objc，那么该方法依然会被添加到方法列表中
    @objc private func composeBtnClick() {
        print("composeBtnClick")
    }
}







/*
 //1.获取json文件路径
 guard let jsonPath = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil) else {
 print("没有获取到对应的文件路径")
 return
 }
 
 //2.读取json文件中的内容
 guard let jsonData = NSData(contentsOfFile: jsonPath)else {
 return;
 }
 
 //3.将data转换成数组
 //如果在调用系统某一个方法时，该方法最后有一个throws，说明该方法会抛出异常，如果一个方法会抛出异常，那么需要对该异常进行处理
 /*
 在swift中提供三种处理异常的方式
 方式一：try方式 程序员手动捕捉异常
 do{
 try NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)
 }catch{
 print（error）
 }
 方式二：try？方式（常用方式）系统帮助我们处理异常，如果该方法出现了异常，则该方法返回nil，如果没有异常，则返回对应的对象
 guard let anyObject = try? NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) else {
 return
 }
 方式三：try！方式（不建议，非常危险）直接告诉系统，该方法没有异常，注意：如果该方法出现了异常，那么程序会报错（崩溃）
 let anyObject = try！ NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers)
 
 */
 guard let anyObject = try? NSJSONSerialization.JSONObjectWithData(jsonData, options: .MutableContainers) else {
 return
 }
 
 guard let dicArray = anyObject as? [[String : AnyObject]] else {
 return
 }
 
 //4.遍历字典，获取对应的信息
 for dict in dicArray {
 guard let vcName = dict["vcName"] as? String else {
 continue
 }
 guard let title = dict["title"] as? String else {
 continue
 }
 guard let imageName = dict["imageName"] as? String else {
 continue
 }
 
 addChildViewController(vcName, title: title, imageName: imageName)
 }
 
 //swift支持方法的重载（OC不支持）
 //方法的重载：方法名称相同，但是参数不同。 ——>1.参数的类型不同 2.参数的个数不同
 //private在当前文件中可以访问，但是其他文件不能访问
 private func addChildViewController(childVcName: String, title : String, imageName : String) {
 
 //0.获取命名空间
 guard let nameSpace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as? String else{
 print("没有获取到命名空间")
 return
 }
 
 //1.根据字符串获取对应的Class
 guard let ChildVcClass = NSClassFromString(nameSpace + "." + childVcName) else{
 print("没有获取到字符串对应的class")
 return
 }
 
 //2.将对应的AnyObject转成控制器的类型
 guard let childVcType = ChildVcClass as? UIViewController.Type else {
 print("没有获取到对应的控制器的类型")
 return
 }
 
 //3.创建对应的控制器对象
 let childVc = childVcType.init()
 
 
 //4.设置子控制器的属性
 childVc.title = title
 childVc.tabBarItem.image = UIImage(named: imageName)
 childVc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
 
 //5.包装导航栏控制器
 let childNav = UINavigationController(rootViewController:childVc)
 
 //6.添加控制器
 addChildViewController(childNav)
 }

 */